/*
 *
 * Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * Redistribution and use in source and binary forms, with or
 * without modification, are permitted provided that the following
 * conditions are met:
 * 
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 * 
 * - Redistribution in binary form must reproduce the above
 *   copyright notice, this list of conditions and the following
 *   disclaimer in the documentation and/or other materials
 *   provided with the distribution.
 * 
 * Neither the name of Sun Microsystems, Inc. or the names of
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 * 
 * This software is provided "AS IS," without a warranty of any
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
 * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
 * DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
 * RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
 * ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
 * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
 * SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
 * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
 * THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 * 
 * You acknowledge that this software is not designed, licensed or
 * intended for use in the design, construction, operation or
 * maintenance of any nuclear facility.
 * 
 */

package filters;

import java.io.*;
import java.sql.Timestamp;
import java.util.Iterator;
import javax.servlet.*;
import javax.servlet.http.*;
import database.BookDetails;
import cart.*;
import util.*;

public final class OrderFilter implements Filter {

      private FilterConfig filterConfig = null;

      public void init(FilterConfig filterConfig) throws ServletException {
          this.filterConfig = filterConfig;
      }
    
      public void destroy() {
          this.filterConfig = null;
      }
      public void doFilter(ServletRequest request, ServletResponse response,
                               FilterChain chain) throws IOException, ServletException {

      if (filterConfig == null)
          return;

      // Render the generic servlet request properties
      StringWriter sw = new StringWriter();
      PrintWriter writer = new PrintWriter(sw);
      ServletContext context = filterConfig.getServletContext();
      Counter counter = (Counter)context.getAttribute("orderCounter");
      HttpServletRequest hsr = (HttpServletRequest)request;
      HttpSession session = hsr.getSession();
      ShoppingCart cart =
          (ShoppingCart)session.getAttribute("cart");
      Currency c = (Currency)session.getAttribute("currency");
      c.setAmount(cart.getTotal());
      writer.println();
      writer.println("=======================================================");
      writer.println("The total number of orders is: " + counter.incCounter());
      writer.println("This order Received at " +
          (new Timestamp(System.currentTimeMillis())));
      writer.println();
      writer.print("Purchased by: " + request.getParameter("cardname"));
      writer.println();
      writer.print("Total: "  + c.getFormat());
      writer.println();
            
            int num = cart.getNumberOfItems();
      if (num > 0) {
            Iterator i = cart.getItems().iterator();
            while (i.hasNext()) {
                  ShoppingCartItem item = (ShoppingCartItem) i.next();
                  BookDetails bookDetails = (BookDetails) item.getItem();
                  writer.print("ISBN: "  + bookDetails.getBookId());
                  writer.print("   Title: "  + bookDetails.getTitle());
                  writer.print("   Quantity: " + item.getQuantity());
                  writer.println();       
            }
      }


      writer.println("=======================================================");

      // Log the resulting string
      writer.flush();
      context.log(sw.getBuffer().toString());
      chain.doFilter(request, response);
    }

    public String toString() {
      if (filterConfig == null)
            return ("OrderFilter()");
      StringBuffer sb = new StringBuffer("OrderFilter(");
      sb.append(filterConfig);
      sb.append(")");
      return (sb.toString());

    }


}

